package com.home.common.util;

import java.math.BigDecimal;
import java.text.DecimalFormat;


/**
 * 
 * @Description:double 类型的 + - * /
 * @createBy：ran-qi-qiang
 * @ClassName:NumberUtil
 */
public class NumberUtil extends CommonUtil{
	// 默认保留的位数
	private static final int NUMBER_ROUND = 10;
	/**
	 * 
	 * @Description:两个double类型  加法
	 * @createBy:qiqiang ran
	 * @param double d1
	 * @param double d2
	 * @return BigDecimal
	 */
	public static Double doubleAdd(double d1,double d2){
		BigDecimal a1 = new BigDecimal(d1);
		BigDecimal b1 = new BigDecimal(d2);
		return a1.add(b1).doubleValue();
	}
	/**
	 * 
	 * @Description:两个double类型相加 减法
	 * @createBy:ran-qi-qiang
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static Double doubleSub(double d1,double d2){
		BigDecimal a1 = new BigDecimal(d1);
		BigDecimal b1 = new BigDecimal(d2);
		return a1.subtract(b1).doubleValue();
	}
	
	/**
	 * 
	 * @Description:两个double类型 乘法 
	 * @createBy:ran-qi-qiang
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static Double doubleMul(double d1,double d2){
		BigDecimal a1 = new BigDecimal(d1);
		BigDecimal b1 = new BigDecimal(d2);
		return a1.multiply(b1).doubleValue();
	}
	
	/**
	 * 
	 * @Description:两个double类型 除法
	 * 				如果除数为0，直接返回0，默认保留10位小数，正方向进行四舍五入
	 * @createBy:ran-qi-qiang
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static Double doubleDiv(double d1,double d2){
		if(d2 == 0){
			return 0.0;
		}
		BigDecimal a1 = new BigDecimal(d1);
		BigDecimal b1 = new BigDecimal(d2);
		return a1.divide(b1,NUMBER_ROUND,BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/**
	 * 
	 * @Description:两个double类型 除法，正方向 保留指定的位数
	 * @createBy:ran-qi-qiang
	 * @param d1
	 * @param d2
	 * @param number_round
	 * @return
	 */
	public static Double doubleDiv(double d1,double d2,int number_round){
		if(d2 == 0){
			return 0.0;
		}
		BigDecimal a1 = new BigDecimal(d1);
		BigDecimal b1 = new BigDecimal(d2);
		return a1.divide(b1,number_round,BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
	/**
	 * 
	 * @Description:两个double类型 除法，BigDecimal.*自定义保留方式 保留指定的位数
	 * @createBy:ran-qi-qiang
	 * @createdate:2012-9-10
	 * @param d1
	 * @param d2
	 * @param number_round
	 * @param bigDecimal_round_
	 * @return
	 */
	public static Double doubleDiv(double d1,double d2,int number_round,int bigDecimal_round_){
		if(d2 == 0){
			return 0.0;
		}
		BigDecimal a1 = new BigDecimal(d1);
		BigDecimal b1 = new BigDecimal(d2);
		return a1.divide(b1,number_round,bigDecimal_round_).doubleValue();
	}
	
	/**
	 * 
	 * @Description:两个double类型 除法，并格式化
	 * @createBy:ran-qi-qiang
	 * @param d1
	 * @param d2
	 * @param format
	 * @return
	 */
	public static String doubleDiv(double d1,double d2,String format){
		return formatDouble(doubleDiv(d1, d2), format);
	}
	
	/**
	 * 
	 * @Description:两个double类型相加,并格式化
	 * @createBy:qiqiang ran
	 * @param double d1
	 * @param double d2
	 * @return BigDecimal
	 */
	public static String doubleAdd(double d1,double d2,String format){
		return formatDouble(doubleAdd(d1, d2), format);
	}
	

	
	/**
	 * 
	 * @Description:格式化double 类型
	 * @createBy:ran-qi-qiang
	 * @createdate:2012-8-30
	 * @param d1
	 * @param format
	 * @return
	 */
	public static String formatDouble(double d1,String format){
		DecimalFormat df = new DecimalFormat(format);
		return df.format(d1);
	}
	
	
	/**
	 * 
	 * @Description:double 乘以 double，并格式化数
	 * @createBy:ran-qi-qiang
	 * @createdate:2012-7-19
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static String doubleMul(double d1,double d2,String format){
		return formatDouble(doubleMul(d1, d2),format);
	}
	

}
